package DataStructure.Stack;

import java.util.Arrays;
import java.util.Stack;

/**
 * @Author：DijaH
 * @Date：2023/2/5 11:44 上午
 * @Version：1.0.0
 * @Description： 下一个比我大的数字，没有的话，则返回-1。
 * [2,1,2,4,3] => [4,2,4,-1,-1]
 *
 * 使用单调栈的方式
 */
public class nextGreatElement {

    public static int [] nextGreat(int [] nums){
        int [] newNums = new int[nums.length];
        //定一个栈结构
        Stack<Integer> stack = new Stack();
        //对于nums倒着遍历
        for(int i = nums.length - 1; i >= 0; i--){
            while(!stack.isEmpty() && stack.peek() <= nums[i] ){//判定个子高矮
                stack.pop();//矮个子出列，反正也被挡住了
            }
            newNums[i] = stack.isEmpty() ? -1 : stack.peek();//这个元素身后的第一个高个
            stack.push(nums[i]);
        }
        return newNums;
    }

    public static void main(String[] args) {
        int [] nums={2,1,2,4,3};
        int[] ints = nextGreat(nums);
        System.out.println(Arrays.toString(ints));


    }
}
